import axios from 'axios'
import { ElMessage } from 'element-plus'
// 引用用户信息的小仓库
import useUserStore from '@/store/modules/user'

// 创建axios实例
let request = axios.create({
  // 基础路径
  baseURL: import.meta.env.VITE_APP_BASE_API,
  // 超时时间
  timeout: 5000,
})

// 请求拦截器(第一个request代表axios实例,可以换成别的名字)
request.interceptors.request.use((config) => {
  let usertStore = useUserStore()
  if (usertStore.token) {
    config.headers.token = usertStore.token
  }
  // config配置对象，包含headers请求头,给服务器端携带公共参数
  // 返回配置对象
  return config
})

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 回调成功，简化数据
    return response.data
  },
  (error) => {
    // 处理网络错误
    let msg = '请求错误，请重试'
    // 响应状态码
    if (error.response) {
      let status = error.response.data
      switch (status) {
        case 401:
          msg = 'token过期'
          break
        case 403:
          msg = '无权访问'
          break
        case 404:
          msg = '请求地址错误'
          break
        case 500:
          msg = '服务器出现问题'
          break
        default:
          msg = '无网络'
      }
    }
    // 错误消息提示
    ElMessage({
      type: 'error',
      message: msg,
    })
    return Promise.reject(error)
  },
)

export default request
